package com.v1.video.httpmanager;

import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import android.text.TextUtils;

import com.v1.video.db.dao.CacheTB;
import com.v1.video.db.service.CacheDB;
/**
 * 数据缓存类
 * @author wangfang
 *
 */
public class MemoryCache {
	// 放入缓存时是个同步操作
	// LinkedHashMap构造方法的最后一个参数true代表这个map里的元素将按照最近使用次数由少到多排列，即LRU
	// 这样的好处是如果要将缓存中的元素替换，则先遍历出最近最少使用的元素来替换以提高效率
	private Map<String, String> mCache = Collections
			.synchronizedMap(new LinkedHashMap<String, String>(10, 1.5f, true));

	/**
	 * 通过key获取键值
	 * @param key
	 * @return
	 */
	public String get(String key) {
		if (mCache.containsKey(key)) {
			return mCache.get(key);
		} else {
			return null;
		}
	}
	
	/**
	 * 添加缓存数据
	 * @param key
	 * @param value
	 */
	public void put(String key, String value) {
		if(!TextUtils.isEmpty(key)){
			mCache.put(key, value);
		}
	}

	/**
	 * 添加缓存数据并存储数据库
	 * @param key
	 * @param value
	 */
	public void putDB(String key, String value) {
		if (!TextUtils.isEmpty(key)) {
			mCache.put(key, value);
			CacheDB.getInstance().insertOrReplace(key, value);
		}
	}
	
	/**
	 * 清除缓存
	 */
	public void clear() {
		mCache.clear();
	}
	
	/**
	 * 判断数据是否存在
	 * @param key
	 * @return
	 */
	public boolean isExist(String key) {
		if (mCache.containsKey(key)) {
			return true;
		} else {
			return false;
		}
	}
	
	public List<CacheTB> memoryToCacheTB() {
		List<CacheTB> mLst = new ArrayList<CacheTB>();
		for (Map.Entry<String, String> entry : mCache.entrySet()) {
			CacheTB cacheTB = new CacheTB();
			cacheTB.setCkey(entry.getKey());
			cacheTB.setCvalue(entry.getValue());
			mLst.add(cacheTB);
		}
		return mLst;
	}
}
